{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 查看FashionMNIST原始数据格式"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(<PIL.Image.Image image mode=L size=28x28 at 0x25FCC794530>, 9)\n"
     ]
    },
    {
     "data": {
      "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wAALCAAcABwBAREA/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9oACAEBAAA/APn+tbw1oNx4m8QWmkWx2yXD4LkZCADJJ+gFbviL4a63oc7COE3MW4hdn38duD976jNc9daDqllIsc9lKrMu4YGeMkdR7gj8KzcV7H8BtEvV16+1iWCeG1Wz8mOV02pIzupwCeuAp6Z98cZ90aIzLIlw0c0ZJ4KgjHoeOa+evjS9n/wnMcNxBPCYLKONFhA2FNzMpGenDcgd816V4K03wefC+m3NlpVhP+5QSXBiR5fMx825iMg5zwce3FdbOzTwgW90lu6uCm8eYrL02soIyCPQgggEdMGQ3cluiPNK0rJwrRQBNueuMkt+teNfGKxsdY8WWdxNqcNo66eieXMwVsb5DnH415Hp2rajpE5n02/urOUjBe3laMkehIPIrVm8eeLrhNknibVivoLtx/I1UPinxC3XXtUP1vJP8ay5JZJpGkldnduSzHJP41//2Q==",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAAAAABXZoBIAAACS0lEQVR4AWKgA2BkYOD1ZGBgZAHZxcjIAKZBbBBm+quS8v3rj1N/GBiZGP8wMKNIMv91cnnCzuU65+X/vww8/76hSP5iMFVgZtpp2HXm8nUz02PHGUHGQTHjf9cugd//GE7f+cUo8ft0yDSEJCMDw/8TCgyMf34x/Ph3/vYfT0VphLH/GRgY3kt+Z2fl+cH5z8aSSWwHqmsZuJiZvn18p/CPkYnr7z9ZBiaofQwMjMwMPFI/frH++sr/j537K9sldhOE5H9mhnBJJg4Gbtlf7L//cQhvusaCkGT5xXDlBxsXl6rSD2Yunr9PoraeYAGZx8T4+x/DHwaGbV+/s/1/zczxm+H3P2a9jwxMDMz///z6+Y+BwW7ime9v//z78/XrXw6GbwxsX4NAYc3AICSlJhmk/oPpN+czVjbhX1zHeOz+fWR9qcnIYNkkKvCX+cMfrl+M36+HneEVVGC4x/v5GycPHxcj83GpP3+/MTB/Z2DgF0lwy3z24/49VeFfrLxsf+UBY0xqv8vDw87Ayv/4mSiTRACHIrexMdMvJjYGRlYLlpeP+X485mHje/eQ5/uPP+svKwj9+vD77y/Wf4xsaixP/z/mFvnw5jULOysHL9Mbza+P37O/+f3nN6fERwOWC+sTn937wcPGwcb88+//by/+/WX5wfPrw4fffxRfMjIweBWLv/7wl5mNhZnxPysrGysjA+NLBrZ/EpfCGJn+MTA4tYnxMzGz/GV8+f/pvy/MDP9/f2Paff0YJBAYGBg0RN/LPPx1Fx5HFDIAaCTYdiCc4RIAAAAASUVORK5CYII=",
      "text/plain": [
       "<PIL.Image.Image image mode=L size=28x28>"
      ]
     },
     "execution_count": 99,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import torch\n",
    "import torchvision\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from torchvision import datasets, transforms\n",
    "from deeplearning_train import EarlyStopping, ModelSaver,train_classification_model,plot_learning_curves\n",
    "from deeplearning_train import evaluate_classification_model as evaluate_model\n",
    "\n",
    "# 加载Fashion MNIST数据集，张量就是和numpy数组一样\n",
    "transform = transforms.Compose([])\n",
    "train_dataset = datasets.FashionMNIST(root='./data', train=True, download=True, transform=transform)\n",
    "test_dataset = datasets.FashionMNIST(root='./data', train=False, download=True, transform=transform)\n",
    "print(train_dataset[0])\n",
    "train_dataset[0][0]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 加载数据并处理为tensor"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集形状: (60000, 28, 28)\n",
      "训练集标签数量: 60000\n",
      "测试集形状: (10000, 28, 28)\n",
      "测试集标签数量: 10000\n",
      "[[  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0\n",
      "    0   0   0   0   0   0   0   0   0   0]\n",
      " [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0\n",
      "    0   0   0   0   0   0   0   0   0   0]\n",
      " [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0\n",
      "    0   0   0   0   0   0   0   0   0   0]\n",
      " [  0   0   0   0   0   0   0   0   0   0   0   0   1   0   0  13  73   0\n",
      "    0   1   4   0   0   0   0   1   1   0]\n",
      " [  0   0   0   0   0   0   0   0   0   0   0   0   3   0  36 136 127  62\n",
      "   54   0   0   0   1   3   4   0   0   3]\n",
      " [  0   0   0   0   0   0   0   0   0   0   0   0   6   0 102 204 176 134\n",
      "  144 123  23   0   0   0   0  12  10   0]\n",
      " [  0   0   0   0   0   0   0   0   0   0   0   0   0   0 155 236 207 178\n",
      "  107 156 161 109  64  23  77 130  72  15]\n",
      " [  0   0   0   0   0   0   0   0   0   0   0   1   0  69 207 223 218 216\n",
      "  216 163 127 121 122 146 141  88 172  66]\n",
      " [  0   0   0   0   0   0   0   0   0   1   1   1   0 200 232 232 233 229\n",
      "  223 223 215 213 164 127 123 196 229   0]\n",
      " [  0   0   0   0   0   0   0   0   0   0   0   0   0 183 225 216 223 228\n",
      "  235 227 224 222 224 221 223 245 173   0]\n",
      " [  0   0   0   0   0   0   0   0   0   0   0   0   0 193 228 218 213 198\n",
      "  180 212 210 211 213 223 220 243 202   0]\n",
      " [  0   0   0   0   0   0   0   0   0   1   3   0  12 219 220 212 218 192\n",
      "  169 227 208 218 224 212 226 197 209  52]\n",
      " [  0   0   0   0   0   0   0   0   0   0   6   0  99 244 222 220 218 203\n",
      "  198 221 215 213 222 220 245 119 167  56]\n",
      " [  0   0   0   0   0   0   0   0   0   4   0   0  55 236 228 230 228 240\n",
      "  232 213 218 223 234 217 217 209  92   0]\n",
      " [  0   0   1   4   6   7   2   0   0   0   0   0 237 226 217 223 222 219\n",
      "  222 221 216 223 229 215 218 255  77   0]\n",
      " [  0   3   0   0   0   0   0   0   0  62 145 204 228 207 213 221 218 208\n",
      "  211 218 224 223 219 215 224 244 159   0]\n",
      " [  0   0   0   0  18  44  82 107 189 228 220 222 217 226 200 205 211 230\n",
      "  224 234 176 188 250 248 233 238 215   0]\n",
      " [  0  57 187 208 224 221 224 208 204 214 208 209 200 159 245 193 206 223\n",
      "  255 255 221 234 221 211 220 232 246   0]\n",
      " [  3 202 228 224 221 211 211 214 205 205 205 220 240  80 150 255 229 221\n",
      "  188 154 191 210 204 209 222 228 225   0]\n",
      " [ 98 233 198 210 222 229 229 234 249 220 194 215 217 241  65  73 106 117\n",
      "  168 219 221 215 217 223 223 224 229  29]\n",
      " [ 75 204 212 204 193 205 211 225 216 185 197 206 198 213 240 195 227 245\n",
      "  239 223 218 212 209 222 220 221 230  67]\n",
      " [ 48 203 183 194 213 197 185 190 194 192 202 214 219 221 220 236 225 216\n",
      "  199 206 186 181 177 172 181 205 206 115]\n",
      " [  0 122 219 193 179 171 183 196 204 210 213 207 211 210 200 196 194 191\n",
      "  195 191 198 192 176 156 167 177 210  92]\n",
      " [  0   0  74 189 212 191 175 172 175 181 185 188 189 188 193 198 204 209\n",
      "  210 210 211 188 188 194 192 216 170   0]\n",
      " [  2   0   0   0  66 200 222 237 239 242 246 243 244 221 220 193 191 179\n",
      "  182 182 181 176 166 168  99  58   0   0]\n",
      " [  0   0   0   0   0   0   0  40  61  44  72  41  35   0   0   0   0   0\n",
      "    0   0   0   0   0   0   0   0   0   0]\n",
      " [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0\n",
      "    0   0   0   0   0   0   0   0   0   0]\n",
      " [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0\n",
      "    0   0   0   0   0   0   0   0   0   0]]\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([9, 0, 0, 3, 0, 2, 7, 2, 5, 5, 0, 9, 5, 5, 7, 9, 1, 0, 6, 4])"
      ]
     },
     "execution_count": 100,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 加载Fashion MNIST数据集，张量就是和numpy数组一样\n",
    "transform = transforms.Compose([\n",
    "    transforms.ToTensor(),\n",
    "    transforms.Normalize((0.286,), (0.353,))  \n",
    "])\n",
    "train_dataset = datasets.FashionMNIST(root='./data', train=True, download=True, transform=transform)\n",
    "test_dataset = datasets.FashionMNIST(root='./data', train=False, download=True, transform=transform)\n",
    "\n",
    "# 获取图像和标签\n",
    "# 注意：由于使用了transform，图像已经被转换为张量且标准化\n",
    "# 我们需要从dataset中提取原始图像用于显示\n",
    "train_images = train_dataset.data.numpy()\n",
    "train_labels = train_dataset.targets.numpy()\n",
    "test_images = test_dataset.data.numpy()\n",
    "test_labels = test_dataset.targets.numpy()\n",
    "\n",
    "# 定义类别名称\n",
    "class_names = ['T-shirt/top', '裤子', '套头衫', '连衣裙', '外套',\n",
    "               '凉鞋', '衬衫', '运动鞋', '包', '短靴']\n",
    "\n",
    "# 查看数据集基本信息\n",
    "print(f\"训练集形状: {train_images.shape}\")\n",
    "print(f\"训练集标签数量: {len(train_labels)}\")\n",
    "print(f\"测试集形状: {test_images.shape}\")\n",
    "print(f\"测试集标签数量: {len(test_labels)}\")\n",
    "\n",
    "print(train_images[0])\n",
    "\n",
    "train_labels[0:20]\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(tensor([[[-8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -8.1020e-01],\n",
       "          [-8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -8.1020e-01],\n",
       "          [-8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -8.1020e-01],\n",
       "          [-8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -7.9909e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -6.6578e-01,  7.7765e-04, -8.1020e-01, -8.1020e-01, -7.9909e-01,\n",
       "           -7.6576e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -7.9909e-01, -7.9909e-01, -8.1020e-01],\n",
       "          [-8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -7.7687e-01, -8.1020e-01, -4.1026e-01,\n",
       "            7.0066e-01,  6.0068e-01, -1.2142e-01, -2.1030e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -7.9909e-01, -7.7687e-01, -7.6576e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -7.7687e-01],\n",
       "          [-8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -7.4354e-01, -8.1020e-01,  3.2295e-01,\n",
       "            1.4561e+00,  1.1450e+00,  6.7844e-01,  7.8954e-01,  5.5624e-01,\n",
       "           -5.5469e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -6.7689e-01, -6.9911e-01, -8.1020e-01],\n",
       "          [-8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,  9.1174e-01,\n",
       "            1.8116e+00,  1.4894e+00,  1.1672e+00,  3.7849e-01,  9.2285e-01,\n",
       "            9.7839e-01,  4.0071e-01, -9.9206e-02, -5.5469e-01,  4.5215e-02,\n",
       "            6.3401e-01, -1.0332e-02, -6.4356e-01],\n",
       "          [-8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -7.9909e-01, -8.1020e-01, -4.3659e-02,  1.4894e+00,\n",
       "            1.6672e+00,  1.6116e+00,  1.5894e+00,  1.5894e+00,  1.0006e+00,\n",
       "            6.0068e-01,  5.3402e-01,  5.4513e-01,  8.1175e-01,  7.5621e-01,\n",
       "            1.6742e-01,  1.1006e+00, -7.6987e-02],\n",
       "          [-8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -7.9909e-01,\n",
       "           -7.9909e-01, -7.9909e-01, -8.1020e-01,  1.4117e+00,  1.7671e+00,\n",
       "            1.7671e+00,  1.7783e+00,  1.7338e+00,  1.6672e+00,  1.6672e+00,\n",
       "            1.5783e+00,  1.5561e+00,  1.0117e+00,  6.0068e-01,  5.5624e-01,\n",
       "            1.3672e+00,  1.7338e+00, -8.1020e-01],\n",
       "          [-8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -8.1020e-01,  1.2228e+00,  1.6894e+00,\n",
       "            1.5894e+00,  1.6672e+00,  1.7227e+00,  1.8005e+00,  1.7116e+00,\n",
       "            1.6783e+00,  1.6561e+00,  1.6783e+00,  1.6449e+00,  1.6672e+00,\n",
       "            1.9116e+00,  1.1117e+00, -8.1020e-01],\n",
       "          [-8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -8.1020e-01,  1.3339e+00,  1.7227e+00,\n",
       "            1.6116e+00,  1.5561e+00,  1.3894e+00,  1.1895e+00,  1.5450e+00,\n",
       "            1.5227e+00,  1.5339e+00,  1.5561e+00,  1.6672e+00,  1.6338e+00,\n",
       "            1.8894e+00,  1.4339e+00, -8.1020e-01],\n",
       "          [-8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -7.9909e-01,\n",
       "           -7.7687e-01, -8.1020e-01, -6.7689e-01,  1.6227e+00,  1.6338e+00,\n",
       "            1.5450e+00,  1.6116e+00,  1.3228e+00,  1.0673e+00,  1.7116e+00,\n",
       "            1.5005e+00,  1.6116e+00,  1.6783e+00,  1.5450e+00,  1.7005e+00,\n",
       "            1.3783e+00,  1.5116e+00, -2.3252e-01],\n",
       "          [-8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -7.4354e-01, -8.1020e-01,  2.8962e-01,  1.9005e+00,  1.6561e+00,\n",
       "            1.6338e+00,  1.6116e+00,  1.4450e+00,  1.3894e+00,  1.6449e+00,\n",
       "            1.5783e+00,  1.5561e+00,  1.6561e+00,  1.6338e+00,  1.9116e+00,\n",
       "            5.1180e-01,  1.0450e+00, -1.8808e-01],\n",
       "          [-8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -7.6576e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -1.9919e-01,  1.8116e+00,  1.7227e+00,\n",
       "            1.7449e+00,  1.7227e+00,  1.8560e+00,  1.7671e+00,  1.5561e+00,\n",
       "            1.6116e+00,  1.6672e+00,  1.7894e+00,  1.6005e+00,  1.6005e+00,\n",
       "            1.5116e+00,  2.1185e-01, -8.1020e-01],\n",
       "          [-8.1020e-01, -8.1020e-01, -7.9909e-01, -7.6576e-01, -7.4354e-01,\n",
       "           -7.3243e-01, -7.8798e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01,  1.8227e+00,  1.7005e+00,  1.6005e+00,\n",
       "            1.6672e+00,  1.6561e+00,  1.6227e+00,  1.6561e+00,  1.6449e+00,\n",
       "            1.5894e+00,  1.6672e+00,  1.7338e+00,  1.5783e+00,  1.6116e+00,\n",
       "            2.0227e+00,  4.5215e-02, -8.1020e-01],\n",
       "          [-8.1020e-01, -7.7687e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -1.2142e-01,\n",
       "            8.0064e-01,  1.4561e+00,  1.7227e+00,  1.4894e+00,  1.5561e+00,\n",
       "            1.6449e+00,  1.6116e+00,  1.5005e+00,  1.5339e+00,  1.6116e+00,\n",
       "            1.6783e+00,  1.6672e+00,  1.6227e+00,  1.5783e+00,  1.6783e+00,\n",
       "            1.9005e+00,  9.5617e-01, -8.1020e-01],\n",
       "          [-8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -6.1023e-01,\n",
       "           -3.2139e-01,  1.0076e-01,  3.7849e-01,  1.2895e+00,  1.7227e+00,\n",
       "            1.6338e+00,  1.6561e+00,  1.6005e+00,  1.7005e+00,  1.4117e+00,\n",
       "            1.4672e+00,  1.5339e+00,  1.7449e+00,  1.6783e+00,  1.7894e+00,\n",
       "            1.1450e+00,  1.2783e+00,  1.9671e+00,  1.9449e+00,  1.7783e+00,\n",
       "            1.8338e+00,  1.5783e+00, -8.1020e-01],\n",
       "          [-8.1020e-01, -1.7697e-01,  1.2672e+00,  1.5005e+00,  1.6783e+00,\n",
       "            1.6449e+00,  1.6783e+00,  1.5005e+00,  1.4561e+00,  1.5672e+00,\n",
       "            1.5005e+00,  1.5116e+00,  1.4117e+00,  9.5617e-01,  1.9116e+00,\n",
       "            1.3339e+00,  1.4783e+00,  1.6672e+00,  2.0227e+00,  2.0227e+00,\n",
       "            1.6449e+00,  1.7894e+00,  1.6449e+00,  1.5339e+00,  1.6338e+00,\n",
       "            1.7671e+00,  1.9227e+00, -8.1020e-01],\n",
       "          [-7.7687e-01,  1.4339e+00,  1.7227e+00,  1.6783e+00,  1.6449e+00,\n",
       "            1.5339e+00,  1.5339e+00,  1.5672e+00,  1.4672e+00,  1.4672e+00,\n",
       "            1.4672e+00,  1.6338e+00,  1.8560e+00,  7.8542e-02,  8.5619e-01,\n",
       "            2.0227e+00,  1.7338e+00,  1.6449e+00,  1.2783e+00,  9.0063e-01,\n",
       "            1.3117e+00,  1.5227e+00,  1.4561e+00,  1.5116e+00,  1.6561e+00,\n",
       "            1.7227e+00,  1.6894e+00, -8.1020e-01],\n",
       "          [ 2.7851e-01,  1.7783e+00,  1.3894e+00,  1.5227e+00,  1.6561e+00,\n",
       "            1.7338e+00,  1.7338e+00,  1.7894e+00,  1.9560e+00,  1.6338e+00,\n",
       "            1.3450e+00,  1.5783e+00,  1.6005e+00,  1.8671e+00, -8.8096e-02,\n",
       "            7.7765e-04,  3.6738e-01,  4.8959e-01,  1.0562e+00,  1.6227e+00,\n",
       "            1.6449e+00,  1.5783e+00,  1.6005e+00,  1.6672e+00,  1.6672e+00,\n",
       "            1.6783e+00,  1.7338e+00, -4.8803e-01],\n",
       "          [ 2.2996e-02,  1.4561e+00,  1.5450e+00,  1.4561e+00,  1.3339e+00,\n",
       "            1.4672e+00,  1.5339e+00,  1.6894e+00,  1.5894e+00,  1.2450e+00,\n",
       "            1.3783e+00,  1.4783e+00,  1.3894e+00,  1.5561e+00,  1.8560e+00,\n",
       "            1.3561e+00,  1.7116e+00,  1.9116e+00,  1.8449e+00,  1.6672e+00,\n",
       "            1.6116e+00,  1.5450e+00,  1.5116e+00,  1.6561e+00,  1.6338e+00,\n",
       "            1.6449e+00,  1.7449e+00, -6.5878e-02],\n",
       "          [-2.7695e-01,  1.4450e+00,  1.2228e+00,  1.3450e+00,  1.5561e+00,\n",
       "            1.3783e+00,  1.2450e+00,  1.3006e+00,  1.3450e+00,  1.3228e+00,\n",
       "            1.4339e+00,  1.5672e+00,  1.6227e+00,  1.6449e+00,  1.6338e+00,\n",
       "            1.8116e+00,  1.6894e+00,  1.5894e+00,  1.4005e+00,  1.4783e+00,\n",
       "            1.2561e+00,  1.2006e+00,  1.1561e+00,  1.1006e+00,  1.2006e+00,\n",
       "            1.4672e+00,  1.4783e+00,  4.6737e-01],\n",
       "          [-8.1020e-01,  5.4513e-01,  1.6227e+00,  1.3339e+00,  1.1784e+00,\n",
       "            1.0895e+00,  1.2228e+00,  1.3672e+00,  1.4561e+00,  1.5227e+00,\n",
       "            1.5561e+00,  1.4894e+00,  1.5339e+00,  1.5227e+00,  1.4117e+00,\n",
       "            1.3672e+00,  1.3450e+00,  1.3117e+00,  1.3561e+00,  1.3117e+00,\n",
       "            1.3894e+00,  1.3228e+00,  1.1450e+00,  9.2285e-01,  1.0450e+00,\n",
       "            1.1561e+00,  1.5227e+00,  2.1185e-01],\n",
       "          [-8.1020e-01, -8.1020e-01,  1.1887e-02,  1.2895e+00,  1.5450e+00,\n",
       "            1.3117e+00,  1.1339e+00,  1.1006e+00,  1.1339e+00,  1.2006e+00,\n",
       "            1.2450e+00,  1.2783e+00,  1.2895e+00,  1.2783e+00,  1.3339e+00,\n",
       "            1.3894e+00,  1.4561e+00,  1.5116e+00,  1.5227e+00,  1.5227e+00,\n",
       "            1.5339e+00,  1.2783e+00,  1.2783e+00,  1.3450e+00,  1.3228e+00,\n",
       "            1.5894e+00,  1.0784e+00, -8.1020e-01],\n",
       "          [-7.8798e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -7.6987e-02,\n",
       "            1.4117e+00,  1.6561e+00,  1.8227e+00,  1.8449e+00,  1.8782e+00,\n",
       "            1.9227e+00,  1.8894e+00,  1.9005e+00,  1.6449e+00,  1.6338e+00,\n",
       "            1.3339e+00,  1.3117e+00,  1.1784e+00,  1.2117e+00,  1.2117e+00,\n",
       "            1.2006e+00,  1.1450e+00,  1.0339e+00,  1.0562e+00,  2.8962e-01,\n",
       "           -1.6586e-01, -8.1020e-01, -8.1020e-01],\n",
       "          [-8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -3.6583e-01, -1.3253e-01, -3.2139e-01,\n",
       "           -1.0332e-02, -3.5472e-01, -4.2137e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -8.1020e-01],\n",
       "          [-8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -8.1020e-01],\n",
       "          [-8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01, -8.1020e-01,\n",
       "           -8.1020e-01, -8.1020e-01, -8.1020e-01]]]),\n",
       " 9)"
      ]
     },
     "execution_count": 101,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#查看归一化后的效果\n",
    "train_dataset[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 102,
   "metadata": {},
   "outputs": [],
   "source": [
    "#如果标准化后，就不在执行该代码\n",
    "\n",
    "def calculate_mean_std(train_dataset):\n",
    "    # 首先将所有图像数据堆叠为一个大张量\n",
    "    all_images = torch.stack([img_tensor for img_tensor, _ in train_dataset])\n",
    "    print(all_images.shape)\n",
    "    # 计算通道维度上的均值和标准差\n",
    "    # Fashion MNIST是灰度图像，只有一个通道\n",
    "    # 对所有像素值计算均值和标准差\n",
    "    mean = torch.mean(all_images)\n",
    "    std = torch.std(all_images)\n",
    "\n",
    "    print(f\"训练数据集均值: {mean.item():.4f}\")\n",
    "    print(f\"训练数据集标准差: {std.item():.4f}\")\n",
    "\n",
    "    # 检查数据集大小\n",
    "    print(f\"数据集中图像总数: {len(train_dataset)}\")\n",
    "\n",
    "# calculate_mean_std(train_dataset)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 103,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "torch.Size([1, 28, 28])"
      ]
     },
     "execution_count": 103,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_dataset[0][0].shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 104,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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3/3ud+/ZgUsrkEb//vSnP71Rf/7yl7/cs6O3ffv2YtWqVY2alg7A/fKXv2x8f8uWLY2FAX19fY1mU/ozzffSz1jVBDwUahQwHvbp3vWudxWf//znG/9+5zvf2ag/6WvmzJnFjBkzGl87H2g78cQTi6lTpza+P23atKK9vb34+c9/3vheanpPmTKlsT+3s1tvvbW48sorG3Uu9bXuvvvuYs2aNY1FU6OXv0w9qebm5kaj3dkvk4fm9ziX3vypYZMmHkn6e/p64hOfuMvGTLkfzMrs1DDPNeU/8pGPFGeeeeYD/jlgcvre977XaGJv3Lix2H///Ru14pJLLmkcREsToFQ/Rr/S5OirX/1qsc8++xT77rtvY+LzL//yL8X69euLxz3uccWFF17YyJniRp177rmNRrmJD/BgpAbQBz7wgeKlL31poyH0/Oc/v7GTli63tNdeexW/+93vGvUn/XvOnDmNP1Nj6fvf/35jxyz9meZcK1asaJzB8rznPa844ogjGo2n173udcWRRx5ZnH/++bv7YQITlBoFjAdLliwpvvOd7xQ//OEPG/9+3/ve12hCb926teju7m4cYEsH39IZKaNSozvFpO9v27atcbAtNbvf8pa3FO9///sbB95SEz19nXPOOY2fueWWW4qf/vSnjQVOqX6lf6fGd/o66qijisc//vHFn/70p+IFL3hBo36lfUcmh5bdvQH8bemIe/pKR7qSNFnZ1dIpbukIXNlSQfuf//mf4m1ve1vpuYFqetazntWYmCTp6HyqT0lqfD/60Y8urrjiinti0+VMOjo6Gn9PO3fpKzXF045fmlillQadnZ33xKdGeqpL6YaaLoECPBip5qSdq2OOOaZxdt3FF18c+rnUbPrEJz7R+Pm0eumxj31s4wyV9DVaz9I9DNLBOYAHS40CxoO0H5fuz/TNb36zce+ldDAt7dftvHI7HaBLB93SPl6qMfcn9anS/l1qlKfalP6eFkmlRZb/+q//Wvzd3/1d8chHPrKx6CnVrzTGU57ylOKZz3xm4ytJB/BS03u//fYbs8fP7qf5XVHpaFdaYX3HHXc0isyXv/zle725P/OZzzSOkCVpYpOO4u/cEPr7v//7xs/uLF0uJf3/pk2big9/+MONn0uny6XTUUav+ZauGze6mjJdX2ln/+///b/ijW984z3/zv1cWu2eHsOdd97Z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",
      "text/plain": [
       "<Figure size 1500x900 with 15 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 导入matplotlib用于绘图\n",
    "import matplotlib.pyplot as plt\n",
    "import matplotlib\n",
    "# 设置中文字体，解决中文显示问题\n",
    "matplotlib.rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体\n",
    "matplotlib.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题\n",
    "\n",
    "# 创建一个3行5列的图表来显示前15个样本\n",
    "plt.figure(figsize=(15, 9))  # 设置图表大小\n",
    "\n",
    "# 遍历前15个样本\n",
    "for i in range(15):\n",
    "    # 创建子图\n",
    "    plt.subplot(3, 5, i + 1)\n",
    "    \n",
    "    # 显示图像\n",
    "    plt.imshow(train_images[i], cmap='gray')\n",
    "    \n",
    "    # 添加标题（显示类别名称）\n",
    "    plt.title(class_names[train_labels[i]], fontsize=10)\n",
    "    \n",
    "    # 关闭坐标轴\n",
    "    plt.axis('off')\n",
    "\n",
    "# 调整子图之间的间距\n",
    "plt.tight_layout()\n",
    "\n",
    "# 显示图表\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 105,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "torch.Size([28, 28])"
      ]
     },
     "execution_count": 105,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_dataset[0][0].squeeze().shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 106,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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3/3ud+/ZgUsrkEb//vSnP71Rf/7yl7/cs6O3ffv2YtWqVY2alg7A/fKXv2x8f8uWLY2FAX19fY1mU/ozzffSz1jVBDwUahQwHvbp3vWudxWf//znG/9+5zvf2ag/6WvmzJnFjBkzGl87H2g78cQTi6lTpza+P23atKK9vb34+c9/3vheanpPmTKlsT+3s1tvvbW48sorG3Uu9bXuvvvuYs2aNY1FU6OXv0w9qebm5kaj3dkvk4fm9ziX3vypYZMmHkn6e/p64hOfuMvGTLkfzMrs1DDPNeU/8pGPFGeeeeYD/jlgcvre977XaGJv3Lix2H///Ru14pJLLmkcREsToFQ/Rr/S5OirX/1qsc8++xT77rtvY+LzL//yL8X69euLxz3uccWFF17YyJniRp177rmNRrmJD/BgpAbQBz7wgeKlL31poyH0/Oc/v7GTli63tNdeexW/+93vGvUn/XvOnDmNP1Nj6fvf/35jxyz9meZcK1asaJzB8rznPa844ogjGo2n173udcWRRx5ZnH/++bv7YQITlBoFjAdLliwpvvOd7xQ//OEPG/9+3/ve12hCb926teju7m4cYEsH39IZKaNSozvFpO9v27atcbAtNbvf8pa3FO9///sbB95SEz19nXPOOY2fueWWW4qf/vSnjQVOqX6lf6fGd/o66qijisc//vHFn/70p+IFL3hBo36lfUcmh5bdvQH8bemIe/pKR7qSNFnZ1dIpbukIXNlSQfuf//mf4m1ve1vpuYFqetazntWYmCTp6HyqT0lqfD/60Y8urrjiinti0+VMOjo6Gn9PO3fpKzXF045fmlillQadnZ33xKdGeqpL6YaaLoECPBip5qSdq2OOOaZxdt3FF18c+rnUbPrEJz7R+Pm0eumxj31s4wyV9DVaz9I9DNLBOYAHS40CxoO0H5fuz/TNb36zce+ldDAt7dftvHI7HaBLB93SPl6qMfcn9anS/l1qlKfalP6eFkmlRZb/+q//Wvzd3/1d8chHPrKx6CnVrzTGU57ylOKZz3xm4ytJB/BS03u//fYbs8fP7qf5XVHpaFdaYX3HHXc0isyXv/zle725P/OZzzSOkCVpYpOO4u/cEPr7v//7xs/uLF0uJf3/pk2big9/+MONn0uny6XTUUav+ZauGze6mjJdX2ln/+///b/ijW984z3/zv1cWu2eHsOdd97Z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",
      "text/plain": [
       "<Figure size 1500x900 with 15 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 创建一个3行5列的图表来显示train_dataset中的前15个样本\n",
    "plt.figure(figsize=(15, 9))  # 设置图表大小\n",
    "\n",
    "# 遍历前15个样本\n",
    "for i in range(15):\n",
    "    # 获取数据和标签\n",
    "    img, label = train_dataset[i]\n",
    "    \n",
    "    # 创建子图\n",
    "    plt.subplot(3, 5, i + 1)\n",
    "    \n",
    "    # 将张量转换为numpy数组并显示图像,squeeze()是用来去掉张量中维度为1的维度\n",
    "    plt.imshow(img.squeeze().numpy(), cmap='gray')\n",
    "    \n",
    "    # 添加标题（显示类别名称）\n",
    "    plt.title(class_names[label], fontsize=10)\n",
    "    \n",
    "    # 关闭坐标轴\n",
    "    plt.axis('off')\n",
    "\n",
    "# 调整子图之间的间距\n",
    "plt.tight_layout()\n",
    "\n",
    "# 显示图表\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 把数据集划分为训练集55000和验证集5000，并给DataLoader"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 107,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集大小: 55000\n",
      "验证集大小: 5000\n",
      "测试集大小: 10000\n",
      "批次大小: 64\n",
      "训练批次数: 860\n"
     ]
    }
   ],
   "source": [
    "# 从训练集中划分出验证集\n",
    "train_size = 55000\n",
    "val_size = 5000\n",
    "# 设置随机种子以确保每次得到相同的随机划分结果\n",
    "generator = torch.Generator().manual_seed(42)\n",
    "train_subset, val_subset = torch.utils.data.random_split(\n",
    "    train_dataset, \n",
    "    [train_size, val_size],\n",
    "    generator=generator #设置随机种子，确保每次得到相同的随机划分结果\n",
    ")\n",
    "\n",
    "# 创建数据加载器\n",
    "batch_size = 64\n",
    "train_loader = torch.utils.data.DataLoader(\n",
    "    train_subset,\n",
    "    batch_size=batch_size,\n",
    "    shuffle=True #打乱数据集，每次迭代时，数据集的顺序都会被打乱\n",
    ")\n",
    "\n",
    "val_loader = torch.utils.data.DataLoader(\n",
    "    val_subset,\n",
    "    batch_size=batch_size,\n",
    "    shuffle=False\n",
    ")\n",
    "\n",
    "test_loader = torch.utils.data.DataLoader(\n",
    "    test_dataset,\n",
    "    batch_size=batch_size,\n",
    "    shuffle=False\n",
    ")\n",
    "\n",
    "# 打印数据集大小信息\n",
    "print(f\"训练集大小: {len(train_subset)}\")\n",
    "print(f\"验证集大小: {len(val_subset)}\")\n",
    "print(f\"测试集大小: {len(test_dataset)}\")\n",
    "print(f\"批次大小: {batch_size}\")\n",
    "print(f\"训练批次数: {len(train_loader)}\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 108,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "55040"
      ]
     },
     "execution_count": 108,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "64*860"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 搭建模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 109,
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch.nn as nn\n",
    "import torch.nn.functional as F\n",
    "\n",
    "class NeuralNetwork(nn.Module):\n",
    "    def __init__(self):\n",
    "        super().__init__()\n",
    "        # 输入层 -> 第一隐藏层 (28*28=784 -> 300)\n",
    "        self.fc1 = nn.Linear(28*28, 300)\n",
    "        # 第一隐藏层 -> 第二隐藏层 (300 -> 100)\n",
    "        self.fc2 = nn.Linear(300, 100)\n",
    "        # 第二隐藏层 -> 输出层 (100 -> 10，对应10个数字类别)\n",
    "        self.fc3 = nn.Linear(100, 10)\n",
    "        \n",
    "    def forward(self, x):#forward是前向传播（正向计算），x是输入\n",
    "        # print(\"输入形状:\", x.shape)\n",
    "        # 将输入张量展平,view就是reshape\n",
    "        x = x.view(-1, 28*28)\n",
    "        # print(\"展平后形状:\", x.shape)\n",
    "        # 第一隐藏层，使用ReLU激活函数\n",
    "        x = F.relu(self.fc1(x))\n",
    "        # print(\"第一隐藏层后形状:\", x.shape)\n",
    "        # 第二隐藏层，使用ReLU激活函数\n",
    "        x = F.relu(self.fc2(x))\n",
    "        # print(\"第二隐藏层后形状:\", x.shape)\n",
    "        # 输出层，不使用激活函数（交叉熵损失函数会在内部应用softmax）\n",
    "        x = self.fc3(x)\n",
    "        # print(\"输出层形状:\", x.shape)\n",
    "        return x\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 110,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "批次图像形状: torch.Size([64, 1, 28, 28])\n",
      "批次标签形状: torch.Size([64])\n",
      "----------------------------------------------------------------------------------------------------\n"
     ]
    }
   ],
   "source": [
    "# 实例化模型\n",
    "model = NeuralNetwork()\n",
    "\n",
    "# 从train_loader获取第一个批次的数据\n",
    "dataiter = iter(train_loader)\n",
    "images, labels = next(dataiter)\n",
    "\n",
    "# 查看批次数据的形状\n",
    "print(\"批次图像形状:\", images.shape)\n",
    "print(\"批次标签形状:\", labels.shape)\n",
    "\n",
    "\n",
    "print('-'*100)\n",
    "# 进行前向传播\n",
    "with torch.no_grad():  # 不需要计算梯度\n",
    "    outputs = model(images)\n",
    "    \n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 111,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "批次图像形状: torch.Size([64, 1, 28, 28])\n",
      "批次标签形状: torch.Size([64])\n",
      "测试图像形状: torch.Size([1, 1, 28, 28])\n",
      "----------------------------------------------------------------------------------------------------\n",
      "模型预测结果: 7\n",
      "实际标签: 5\n"
     ]
    }
   ],
   "source": [
    "# 实例化模型\n",
    "model = NeuralNetwork()\n",
    "\n",
    "# 从train_loader获取第一个批次的数据\n",
    "dataiter = iter(train_loader)\n",
    "images, labels = next(dataiter)\n",
    "\n",
    "# 查看批次数据的形状\n",
    "print(\"批次图像形状:\", images.shape)\n",
    "print(\"批次标签形状:\", labels.shape)\n",
    "\n",
    "# # 选择第一张图像进行前向传播测试,unsqueeze(0)是添加批次维度\n",
    "test_image = images[0].unsqueeze(0)  # 添加批次维度\n",
    "print(\"测试图像形状:\", test_image.shape)\n",
    "\n",
    "print('-'*100)\n",
    "# 进行前向传播\n",
    "with torch.no_grad():  # 不需要计算梯度\n",
    "    outputs = model(test_image)\n",
    "    \n",
    "# 获取预测结果\n",
    "_, predicted = torch.max(outputs, 1)\n",
    "print(\"模型预测结果:\", predicted.item())\n",
    "print(\"实际标签:\", labels[0].item())\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 112,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "模型总参数量: 266610\n",
      "\n",
      "各层参数量明细:\n",
      "fc1.weight: 235200 参数\n",
      "fc1.bias: 300 参数\n",
      "fc2.weight: 30000 参数\n",
      "fc2.bias: 100 参数\n",
      "fc3.weight: 1000 参数\n",
      "fc3.bias: 10 参数\n"
     ]
    }
   ],
   "source": [
    "# 计算模型的总参数量\n",
    "total_params = sum(p.numel() for p in model.parameters())\n",
    "print(f\"模型总参数量: {total_params}\")\n",
    "\n",
    "# 查看每层参数量明细\n",
    "print(\"\\n各层参数量明细:\")\n",
    "for name, param in model.named_parameters():\n",
    "    print(f\"{name}: {param.numel()} 参数\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 113,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "OrderedDict([('fc1.weight',\n",
       "              tensor([[-0.0178, -0.0236, -0.0032,  ..., -0.0349, -0.0224,  0.0312],\n",
       "                      [ 0.0220,  0.0334,  0.0135,  ..., -0.0253,  0.0078,  0.0173],\n",
       "                      [-0.0055,  0.0146, -0.0333,  ...,  0.0313,  0.0242, -0.0218],\n",
       "                      ...,\n",
       "                      [ 0.0162, -0.0073,  0.0005,  ..., -0.0175,  0.0227, -0.0168],\n",
       "                      [ 0.0277,  0.0346,  0.0040,  ...,  0.0291, -0.0333, -0.0241],\n",
       "                      [ 0.0173,  0.0186, -0.0037,  ..., -0.0156, -0.0211,  0.0337]])),\n",
       "             ('fc1.bias',\n",
       "              tensor([-0.0238, -0.0188, -0.0348, -0.0093, -0.0004,  0.0015,  0.0163, -0.0343,\n",
       "                       0.0082, -0.0110,  0.0190,  0.0113, -0.0179,  0.0347, -0.0205, -0.0333,\n",
       "                       0.0197,  0.0136, -0.0099, -0.0251,  0.0052, -0.0315,  0.0085,  0.0223,\n",
       "                      -0.0115,  0.0110, -0.0353,  0.0221,  0.0147,  0.0351,  0.0346,  0.0027,\n",
       "                       0.0244,  0.0117, -0.0330,  0.0240,  0.0204, -0.0193, -0.0225,  0.0124,\n",
       "                      -0.0222,  0.0054,  0.0170,  0.0134,  0.0164,  0.0043, -0.0103, -0.0190,\n",
       "                      -0.0126, -0.0187, -0.0041, -0.0041, -0.0071,  0.0147, -0.0258, -0.0235,\n",
       "                      -0.0083, -0.0058, -0.0282,  0.0347,  0.0133, -0.0071, -0.0266, -0.0323,\n",
       "                      -0.0345,  0.0083,  0.0085, -0.0098, -0.0335, -0.0307, -0.0203,  0.0283,\n",
       "                      -0.0266,  0.0131, -0.0356,  0.0084, -0.0152, -0.0205, -0.0186, -0.0214,\n",
       "                       0.0166,  0.0149,  0.0337,  0.0159, -0.0224, -0.0221, -0.0234,  0.0172,\n",
       "                       0.0159, -0.0064, -0.0021,  0.0090,  0.0352,  0.0333, -0.0234,  0.0268,\n",
       "                      -0.0137, -0.0033, -0.0098, -0.0282,  0.0321, -0.0097,  0.0350,  0.0310,\n",
       "                      -0.0202, -0.0154,  0.0099,  0.0214, -0.0027, -0.0319, -0.0347, -0.0035,\n",
       "                       0.0020,  0.0022, -0.0310, -0.0188, -0.0044,  0.0202, -0.0214,  0.0349,\n",
       "                       0.0229,  0.0248, -0.0257,  0.0148,  0.0180, -0.0229,  0.0258,  0.0218,\n",
       "                      -0.0077,  0.0144,  0.0072, -0.0040,  0.0342, -0.0204, -0.0005, -0.0192,\n",
       "                      -0.0301, -0.0155,  0.0139,  0.0308,  0.0322,  0.0198,  0.0180, -0.0319,\n",
       "                       0.0038,  0.0309,  0.0063, -0.0097, -0.0018, -0.0184,  0.0027,  0.0177,\n",
       "                       0.0040, -0.0295, -0.0257, -0.0153,  0.0300, -0.0213,  0.0189, -0.0321,\n",
       "                      -0.0033, -0.0079,  0.0066, -0.0112, -0.0158,  0.0072,  0.0214,  0.0167,\n",
       "                      -0.0257, -0.0240, -0.0017,  0.0336, -0.0096, -0.0247,  0.0287, -0.0021,\n",
       "                      -0.0138, -0.0265,  0.0195,  0.0320,  0.0166,  0.0332,  0.0254, -0.0111,\n",
       "                      -0.0180, -0.0061,  0.0098, -0.0317, -0.0012, -0.0314, -0.0318,  0.0116,\n",
       "                      -0.0136,  0.0027,  0.0203, -0.0043, -0.0317,  0.0352,  0.0089,  0.0216,\n",
       "                       0.0223,  0.0278, -0.0269,  0.0026,  0.0114, -0.0240, -0.0002,  0.0032,\n",
       "                       0.0344,  0.0115, -0.0084,  0.0280,  0.0232, -0.0089, -0.0142,  0.0170,\n",
       "                       0.0186, -0.0017, -0.0352, -0.0300, -0.0219, -0.0068, -0.0340, -0.0288,\n",
       "                      -0.0174, -0.0041, -0.0069,  0.0284,  0.0218,  0.0065,  0.0069, -0.0058,\n",
       "                       0.0266,  0.0233,  0.0130, -0.0307,  0.0049,  0.0007, -0.0241,  0.0325,\n",
       "                      -0.0282,  0.0222, -0.0087,  0.0220,  0.0245, -0.0308, -0.0340,  0.0173,\n",
       "                      -0.0067, -0.0105,  0.0248, -0.0040, -0.0055,  0.0353,  0.0348, -0.0352,\n",
       "                      -0.0247,  0.0295, -0.0314, -0.0240, -0.0325, -0.0109,  0.0349,  0.0038,\n",
       "                       0.0060, -0.0231,  0.0162,  0.0166, -0.0041, -0.0009, -0.0060, -0.0044,\n",
       "                       0.0328,  0.0211,  0.0235,  0.0072,  0.0017, -0.0025, -0.0296, -0.0174,\n",
       "                      -0.0045, -0.0126,  0.0146, -0.0222,  0.0103, -0.0048,  0.0024,  0.0342,\n",
       "                       0.0326, -0.0240, -0.0155,  0.0014, -0.0064,  0.0177, -0.0103,  0.0226,\n",
       "                       0.0087, -0.0197, -0.0262,  0.0182])),\n",
       "             ('fc2.weight',\n",
       "              tensor([[-0.0480, -0.0175,  0.0517,  ...,  0.0519,  0.0240,  0.0453],\n",
       "                      [ 0.0551, -0.0565, -0.0358,  ..., -0.0409,  0.0107, -0.0279],\n",
       "                      [ 0.0176, -0.0369,  0.0095,  ...,  0.0322, -0.0017,  0.0307],\n",
       "                      ...,\n",
       "                      [ 0.0160, -0.0554, -0.0454,  ...,  0.0512,  0.0267,  0.0458],\n",
       "                      [ 0.0195, -0.0475, -0.0374,  ...,  0.0087,  0.0419, -0.0351],\n",
       "                      [ 0.0086,  0.0490, -0.0053,  ..., -0.0576,  0.0178,  0.0416]])),\n",
       "             ('fc2.bias',\n",
       "              tensor([-0.0392, -0.0158,  0.0325, -0.0565,  0.0282,  0.0163,  0.0185, -0.0170,\n",
       "                       0.0483, -0.0358, -0.0142,  0.0359, -0.0518,  0.0447, -0.0388, -0.0476,\n",
       "                      -0.0080, -0.0010,  0.0321, -0.0382, -0.0156,  0.0362,  0.0036, -0.0513,\n",
       "                       0.0576,  0.0511, -0.0392, -0.0561, -0.0375, -0.0355, -0.0266, -0.0292,\n",
       "                       0.0194, -0.0465,  0.0107,  0.0392,  0.0493, -0.0217, -0.0471, -0.0189,\n",
       "                       0.0202, -0.0055,  0.0251,  0.0545,  0.0311,  0.0301, -0.0313,  0.0364,\n",
       "                      -0.0227, -0.0467,  0.0533, -0.0210,  0.0341, -0.0249,  0.0326,  0.0514,\n",
       "                      -0.0185, -0.0156,  0.0360,  0.0061, -0.0502,  0.0077,  0.0078,  0.0193,\n",
       "                       0.0214,  0.0162,  0.0217, -0.0461,  0.0392,  0.0271, -0.0476, -0.0530,\n",
       "                       0.0569,  0.0408, -0.0489, -0.0309, -0.0408, -0.0415,  0.0081,  0.0312,\n",
       "                      -0.0504, -0.0149,  0.0167,  0.0467,  0.0476,  0.0472,  0.0418,  0.0277,\n",
       "                       0.0021, -0.0567,  0.0235,  0.0250, -0.0006,  0.0157,  0.0256,  0.0227,\n",
       "                       0.0346,  0.0009,  0.0429, -0.0531])),\n",
       "             ('fc3.weight',\n",
       "              tensor([[ 0.0218,  0.0101,  0.0217, -0.0038, -0.0478,  0.0663,  0.0865, -0.0777,\n",
       "                       -0.0999,  0.0667,  0.0509, -0.0616,  0.0636,  0.0532, -0.0540,  0.0715,\n",
       "                        0.0714, -0.0335, -0.0945,  0.0055, -0.0874, -0.0435,  0.0501,  0.0594,\n",
       "                        0.0507,  0.0216,  0.0081, -0.0666, -0.0796,  0.0027, -0.0128,  0.0491,\n",
       "                       -0.0932,  0.0971, -0.0525, -0.0722, -0.0037, -0.0960,  0.0497,  0.0747,\n",
       "                        0.0707,  0.0464,  0.0287,  0.0289,  0.0526,  0.0072, -0.0795, -0.0367,\n",
       "                       -0.0068,  0.0326, -0.0430,  0.0399,  0.0994,  0.0479, -0.0898,  0.0848,\n",
       "                       -0.0094, -0.0482,  0.0771,  0.0866, -0.0646,  0.0819, -0.0495,  0.0581,\n",
       "                        0.0156, -0.0540,  0.0387, -0.0031,  0.0081, -0.0868,  0.0708, -0.0459,\n",
       "                        0.0975, -0.0575,  0.0044, -0.0646, -0.0124,  0.0928,  0.0252, -0.0411,\n",
       "                        0.0919,  0.0706, -0.0649,  0.0387, -0.0815, -0.0910,  0.0716, -0.0142,\n",
       "                        0.0091, -0.0381, -0.0487, -0.0034,  0.0390, -0.0373, -0.0759,  0.0279,\n",
       "                       -0.0532,  0.0960,  0.0349,  0.0260],\n",
       "                      [-0.0749, -0.0832, -0.0131,  0.0529,  0.0147, -0.0340,  0.0828,  0.0975,\n",
       "                        0.0543,  0.0521, -0.0875, -0.0302, -0.0420, -0.0730, -0.0472,  0.0882,\n",
       "                        0.0499,  0.0439, -0.0271,  0.0860, -0.0312,  0.0134,  0.0374, -0.0797,\n",
       "                        0.0887, -0.0223, -0.0650,  0.0767,  0.0041,  0.0709, -0.0048, -0.0223,\n",
       "                        0.0888, -0.0569, -0.0825, -0.0487, -0.0468,  0.0708, -0.0502, -0.0388,\n",
       "                       -0.0708, -0.0801, -0.0038, -0.0648, -0.0623, -0.0628,  0.0841,  0.0090,\n",
       "                        0.0686,  0.0223,  0.0439, -0.0924,  0.0337, -0.0932,  0.0007, -0.0199,\n",
       "                       -0.0109,  0.0429,  0.0240,  0.0716,  0.0111, -0.0056,  0.0369,  0.0947,\n",
       "                        0.0903,  0.0169,  0.0540, -0.0767,  0.0722,  0.0681,  0.0807,  0.0320,\n",
       "                        0.0607, -0.0777, -0.0427, -0.0652,  0.0864, -0.0777, -0.0853,  0.0773,\n",
       "                       -0.0808,  0.0023, -0.0710,  0.0614, -0.0013, -0.0119, -0.0790, -0.0955,\n",
       "                       -0.0928, -0.0159,  0.0290,  0.0583, -0.0895,  0.0072,  0.0970, -0.0833,\n",
       "                       -0.0542, -0.0817,  0.0580,  0.0238],\n",
       "                      [ 0.0382,  0.0716,  0.0901,  0.0256,  0.0165, -0.0987,  0.0479, -0.0061,\n",
       "                        0.0385, -0.0688, -0.0795, -0.0003, -0.0432,  0.0783,  0.0109, -0.0352,\n",
       "                        0.0831, -0.0216, -0.0108, -0.0868, -0.0366, -0.0782, -0.0736, -0.0215,\n",
       "                       -0.0896, -0.0556, -0.0742, -0.0887, -0.0795,  0.0434,  0.0816, -0.0184,\n",
       "                        0.0288, -0.0889,  0.0008, -0.0473, -0.0375, -0.0258,  0.0610, -0.0397,\n",
       "                       -0.0161, -0.0448, -0.0268, -0.0724,  0.0221, -0.0570,  0.0058, -0.0881,\n",
       "                       -0.0276,  0.0406, -0.0562, -0.0104, -0.0587,  0.0909, -0.0015, -0.0355,\n",
       "                        0.0561, -0.0934, -0.0254,  0.0224,  0.0681, -0.0124, -0.0405,  0.0934,\n",
       "                        0.0827,  0.0699,  0.0239,  0.0688, -0.0902,  0.0497, -0.0942,  0.0435,\n",
       "                        0.0534, -0.0572,  0.0942,  0.0037,  0.0108,  0.0595,  0.0548,  0.0024,\n",
       "                       -0.0191, -0.0748,  0.0922, -0.0695, -0.0754,  0.0221, -0.0678,  0.0126,\n",
       "                       -0.0456,  0.0936, -0.0149, -0.0139, -0.0196,  0.0547,  0.0235, -0.0337,\n",
       "                       -0.0763,  0.0259, -0.0045,  0.0200],\n",
       "                      [-0.0336,  0.0085,  0.0429,  0.0143,  0.0919, -0.0008, -0.0300, -0.0332,\n",
       "                       -0.0966, -0.0762,  0.0393, -0.0069,  0.0403,  0.0302,  0.0959,  0.0038,\n",
       "                        0.0749,  0.0189,  0.0305, -0.0815, -0.0005, -0.0848,  0.0567,  0.0386,\n",
       "                       -0.0168,  0.0531,  0.0007,  0.0653,  0.0498, -0.0343, -0.0470, -0.0328,\n",
       "                       -0.0054,  0.0003, -0.0299,  0.0659,  0.0339,  0.0142,  0.0365,  0.0997,\n",
       "                       -0.0951, -0.0575,  0.0903, -0.0329, -0.0058, -0.0326,  0.0322,  0.0505,\n",
       "                        0.0563,  0.0654,  0.0430, -0.0932, -0.0599,  0.0757, -0.0775,  0.0925,\n",
       "                        0.0478, -0.0916, -0.0387,  0.0441,  0.0072,  0.0632,  0.0113,  0.0080,\n",
       "                        0.0989, -0.0412,  0.0176,  0.0054, -0.0394,  0.0257, -0.0876,  0.0076,\n",
       "                        0.0019, -0.0185, -0.0070, -0.0045,  0.0862,  0.0276,  0.0209, -0.0160,\n",
       "                        0.0925,  0.0992,  0.0262, -0.0212,  0.0599, -0.0126,  0.0086, -0.0111,\n",
       "                        0.0840, -0.0923, -0.0378,  0.0235,  0.0533,  0.0548,  0.0802,  0.0284,\n",
       "                        0.0637, -0.0846,  0.0266,  0.0678],\n",
       "                      [-0.0589,  0.0368, -0.0848,  0.0392,  0.0739,  0.0904, -0.0440, -0.0743,\n",
       "                       -0.0239, -0.0149,  0.0631,  0.0713,  0.0412,  0.0141,  0.0871, -0.0581,\n",
       "                       -0.0979,  0.0508, -0.0086,  0.0179,  0.0195, -0.0321,  0.0964, -0.0718,\n",
       "                       -0.0429,  0.0349,  0.0572,  0.0438,  0.0588,  0.0803,  0.0743, -0.0417,\n",
       "                       -0.0664,  0.0121,  0.0853,  0.0189, -0.0669, -0.0498,  0.0013, -0.0200,\n",
       "                        0.0914, -0.0581,  0.0872,  0.0186,  0.0924,  0.0930,  0.0583, -0.0222,\n",
       "                       -0.0738, -0.0173,  0.0107,  0.0030,  0.0287, -0.0312, -0.0275, -0.0059,\n",
       "                        0.0262, -0.0886,  0.0409,  0.0055,  0.0838,  0.0652, -0.0961,  0.0233,\n",
       "                        0.0206, -0.0135,  0.0460, -0.0716, -0.0884,  0.0194,  0.0106,  0.0213,\n",
       "                       -0.0973,  0.0992,  0.0688,  0.0780,  0.0002,  0.0797,  0.0615, -0.0952,\n",
       "                       -0.0248,  0.0178, -0.0637, -0.0335, -0.0444, -0.0619,  0.0711, -0.0094,\n",
       "                        0.0201, -0.0575, -0.0650,  0.0101,  0.0192,  0.0685, -0.0539,  0.0257,\n",
       "                        0.0432, -0.0500, -0.0891,  0.0162],\n",
       "                      [ 0.0269,  0.0236,  0.0106,  0.0529,  0.0287,  0.0328, -0.0641,  0.0231,\n",
       "                        0.0728,  0.0048, -0.0598, -0.0159, -0.0623,  0.0729, -0.0962,  0.0352,\n",
       "                       -0.0136, -0.0860,  0.0634,  0.0100,  0.0922,  0.0250,  0.0821,  0.0334,\n",
       "                       -0.0802,  0.0498,  0.0879,  0.0256, -0.0915,  0.0167, -0.0213, -0.0732,\n",
       "                       -0.0435, -0.0035, -0.0303,  0.0201, -0.0827, -0.0062, -0.0941,  0.0396,\n",
       "                       -0.0650,  0.0261,  0.0512,  0.0795, -0.0223, -0.0863,  0.0558, -0.0653,\n",
       "                        0.0936, -0.0225, -0.0294,  0.0898,  0.0493, -0.0356,  0.0018,  0.0078,\n",
       "                        0.0791, -0.0656,  0.0601,  0.0986, -0.0720,  0.0341, -0.0245, -0.0632,\n",
       "                        0.0506, -0.0637,  0.0115, -0.0764, -0.0705, -0.0006, -0.0853,  0.0479,\n",
       "                        0.0742,  0.0346,  0.0159,  0.0532, -0.0462, -0.0358,  0.0610, -0.0933,\n",
       "                       -0.0231,  0.0253, -0.0366,  0.0255,  0.0633, -0.0501,  0.0783, -0.0160,\n",
       "                        0.0317,  0.0426,  0.0089, -0.0350, -0.0637,  0.0280,  0.0211,  0.0621,\n",
       "                       -0.0955, -0.0315,  0.0987,  0.0254],\n",
       "                      [ 0.0903,  0.0805, -0.0353,  0.0322, -0.0216, -0.0037,  0.0158,  0.0285,\n",
       "                        0.0428, -0.0780,  0.0550,  0.0912, -0.0674, -0.0163, -0.0188,  0.0740,\n",
       "                       -0.0573,  0.0098,  0.0603,  0.0172, -0.0064,  0.0829,  0.0288, -0.0711,\n",
       "                        0.0037, -0.0844, -0.0626,  0.0835, -0.0876,  0.0154,  0.0720,  0.0465,\n",
       "                        0.0125, -0.0046,  0.0490, -0.0921, -0.0675, -0.0113,  0.0097,  0.0360,\n",
       "                       -0.0931,  0.0896, -0.0186,  0.0488, -0.0518,  0.0407,  0.0870,  0.0292,\n",
       "                       -0.0371,  0.0788,  0.0540, -0.0276, -0.0595,  0.0399,  0.0149,  0.0311,\n",
       "                        0.0673,  0.0038, -0.0612,  0.0175,  0.0118,  0.0429, -0.0765, -0.0217,\n",
       "                        0.0518, -0.0245, -0.0940,  0.0898, -0.0724, -0.0056, -0.0132,  0.0265,\n",
       "                        0.0726,  0.0321, -0.0012, -0.0068,  0.0961,  0.0276, -0.0810,  0.0113,\n",
       "                       -0.0584,  0.0393, -0.0810,  0.0727,  0.0247,  0.0032, -0.0041,  0.0247,\n",
       "                       -0.0708, -0.0001,  0.0504,  0.0577, -0.0632, -0.0047, -0.0655, -0.0263,\n",
       "                       -0.0236, -0.0891,  0.0442, -0.0010],\n",
       "                      [ 0.0262,  0.0319, -0.0352,  0.0585, -0.0425,  0.0610,  0.0799,  0.0511,\n",
       "                       -0.0932,  0.0868,  0.0284, -0.0307, -0.0926,  0.0719, -0.0330,  0.0947,\n",
       "                       -0.0369,  0.0685, -0.0471,  0.0128, -0.0825, -0.0689,  0.0598, -0.0792,\n",
       "                        0.0996, -0.0277,  0.0240,  0.0183,  0.0461, -0.0430,  0.0062,  0.0234,\n",
       "                        0.0752, -0.0142,  0.0769, -0.0649, -0.0055,  0.0413,  0.0328,  0.0568,\n",
       "                       -0.0307,  0.0044,  0.0508,  0.0492,  0.0577,  0.0806, -0.0572, -0.0615,\n",
       "                       -0.0332, -0.0793, -0.0665, -0.0285, -0.0007,  0.0328, -0.0299, -0.0822,\n",
       "                       -0.0958,  0.0609, -0.0879,  0.0493,  0.0682,  0.0099,  0.0558,  0.0476,\n",
       "                       -0.0172,  0.0479,  0.0072, -0.0570, -0.0930,  0.0701, -0.0330,  0.0606,\n",
       "                        0.0820, -0.0075, -0.0092,  0.0679, -0.0541,  0.0039, -0.0850, -0.0007,\n",
       "                       -0.0790,  0.0921, -0.0486,  0.0044,  0.0691, -0.0765, -0.0859,  0.0264,\n",
       "                       -0.0005, -0.0808, -0.0156, -0.0539, -0.0145,  0.0434, -0.0118,  0.0073,\n",
       "                        0.0510,  0.0115, -0.0883, -0.0040],\n",
       "                      [ 0.0907,  0.0930, -0.0493, -0.0790,  0.0099, -0.0176, -0.0919, -0.0059,\n",
       "                        0.0730, -0.0004, -0.0851,  0.0059,  0.0387,  0.0069, -0.0421, -0.0837,\n",
       "                        0.0436, -0.0612,  0.0652, -0.0126, -0.0731,  0.0084, -0.0858, -0.0572,\n",
       "                        0.0156,  0.0093,  0.0971, -0.0543, -0.0579,  0.0211,  0.0204, -0.0261,\n",
       "                        0.0083, -0.0347,  0.0542,  0.0245, -0.0101, -0.0306, -0.0965, -0.0620,\n",
       "                        0.0268, -0.0633,  0.0911, -0.0172,  0.0861,  0.0154,  0.0961,  0.0952,\n",
       "                       -0.0780,  0.0763,  0.0132, -0.0886,  0.0402, -0.0181, -0.0174, -0.0671,\n",
       "                        0.0142,  0.0532, -0.0506,  0.0824, -0.0203,  0.0850, -0.0806, -0.0206,\n",
       "                        0.0951, -0.0773,  0.0596,  0.0151, -0.0499,  0.0917, -0.0088,  0.0942,\n",
       "                       -0.0403,  0.0115, -0.0776,  0.0634,  0.0277, -0.0874, -0.0995, -0.0412,\n",
       "                       -0.0233, -0.0832,  0.0228, -0.0630, -0.0463, -0.0167, -0.0618, -0.0061,\n",
       "                       -0.0609,  0.0458,  0.0441, -0.0569, -0.0787, -0.0082, -0.0269,  0.0529,\n",
       "                        0.0736, -0.0261, -0.0478,  0.0340],\n",
       "                      [ 0.0614,  0.0235, -0.0650, -0.0594, -0.0219, -0.0646,  0.0485, -0.0903,\n",
       "                       -0.0111, -0.0031,  0.0967,  0.0552,  0.0249,  0.0769, -0.0467, -0.0153,\n",
       "                       -0.0642,  0.0064,  0.0846, -0.0237, -0.0330,  0.0889, -0.0661, -0.0125,\n",
       "                       -0.0869,  0.0117,  0.0284, -0.0052, -0.0335, -0.0117,  0.0094,  0.0177,\n",
       "                        0.0473, -0.0002, -0.0479,  0.0937,  0.0024, -0.0097, -0.0948,  0.0261,\n",
       "                       -0.0168,  0.0748, -0.0922,  0.0146,  0.0448, -0.0462,  0.0933, -0.0217,\n",
       "                       -0.0852,  0.0409, -0.0411, -0.0781,  0.0968, -0.0646,  0.0629,  0.0384,\n",
       "                       -0.0319, -0.0789,  0.0339, -0.0202,  0.0679,  0.0479,  0.0014, -0.0799,\n",
       "                        0.0938,  0.0594,  0.0176,  0.0604,  0.0110, -0.0886, -0.0558, -0.0489,\n",
       "                        0.0560, -0.0187,  0.0378, -0.0195,  0.0522,  0.0724,  0.0262, -0.0693,\n",
       "                        0.0886, -0.0214,  0.0609,  0.0691, -0.0453, -0.0322, -0.0522, -0.0841,\n",
       "                        0.0854, -0.0132, -0.0408,  0.0560,  0.0438,  0.0547, -0.0744,  0.0502,\n",
       "                       -0.0956,  0.0353,  0.0262, -0.0060]])),\n",
       "             ('fc3.bias',\n",
       "              tensor([-0.0028,  0.0671,  0.0643,  0.0645, -0.0912, -0.0145, -0.0611,  0.0319,\n",
       "                      -0.0820, -0.0721]))])"
      ]
     },
     "execution_count": 113,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.state_dict()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 114,
   "metadata": {},
   "outputs": [],
   "source": [
    "from torch.utils.tensorboard import SummaryWriter\n",
    "class TensorboardLogger:\n",
    "    \"\"\"\n",
    "    Tensorboard日志记录类：记录训练过程中的损失和准确率\n",
    "    \n",
    "    参数:\n",
    "        log_dir: 日志保存目录\n",
    "    \"\"\"\n",
    "    def __init__(self, log_dir='tensorboard_logs'):\n",
    "\n",
    "        import os\n",
    "        \n",
    "        # 确保日志目录存在\n",
    "        if not os.path.exists(log_dir):\n",
    "            os.makedirs(log_dir)\n",
    "            \n",
    "        self.writer = SummaryWriter(log_dir) # 实例化SummaryWriter, log_dir是log存放路径，flush_secs是每隔多少秒写入磁盘\n",
    "        \n",
    "    def log_training(self, epoch, train_loss, train_acc):\n",
    "        \"\"\"\n",
    "        记录训练数据\n",
    "        \n",
    "        参数:\n",
    "            epoch: 当前训练轮数\n",
    "            train_loss: 训练损失\n",
    "            train_acc: 训练准确率\n",
    "        \"\"\"\n",
    "        self.writer.add_scalar('训练/损失', train_loss, epoch)\n",
    "        self.writer.add_scalar('训练/准确率', train_acc, epoch)\n",
    "        \n",
    "    def log_validation(self, epoch, val_loss, val_acc):\n",
    "        \"\"\"\n",
    "        记录验证数据\n",
    "        \n",
    "        参数:\n",
    "            epoch: 当前训练轮数\n",
    "            val_loss: 验证损失\n",
    "            val_acc: 验证准确率\n",
    "        \"\"\"\n",
    "        self.writer.add_scalar('验证/损失', val_loss, epoch)\n",
    "        self.writer.add_scalar('验证/准确率', val_acc, epoch)\n",
    "    \n",
    "    def log_lr(self, epoch, lr):\n",
    "        \"\"\"\n",
    "        记录学习率\n",
    "        \n",
    "        参数:\n",
    "            epoch: 当前训练轮数\n",
    "            lr: 学习率\n",
    "        \"\"\"\n",
    "        self.writer.add_scalar('学习率', lr, epoch)\n",
    "        \n",
    "    def log_model_graph(self, model, images):\n",
    "        \"\"\"\n",
    "        记录模型结构图\n",
    "        \n",
    "        参数:\n",
    "            model: 模型\n",
    "            images: 输入图像样本\n",
    "        \"\"\"\n",
    "        self.writer.add_graph(model, images)\n",
    "        \n",
    "    def close(self):\n",
    "        \"\"\"\n",
    "        关闭Tensorboard写入器\n",
    "        \"\"\"\n",
    "        self.writer.close()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 设置交叉熵损失函数，SGD优化器"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 115,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "损失函数: CrossEntropyLoss()\n",
      "优化器: SGD (\n",
      "Parameter Group 0\n",
      "    dampening: 0\n",
      "    differentiable: False\n",
      "    foreach: None\n",
      "    fused: None\n",
      "    lr: 0.01\n",
      "    maximize: False\n",
      "    momentum: 0.9\n",
      "    nesterov: False\n",
      "    weight_decay: 0\n",
      ")\n"
     ]
    }
   ],
   "source": [
    "model = NeuralNetwork()\n",
    "# 定义损失函数和优化器\n",
    "loss_fn = nn.CrossEntropyLoss()  # 交叉熵损失函数，适用于多分类问题，里边会做softmax，还有会把0-9标签转换成one-hot编码\n",
    "optimizer = torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.9)  # SGD优化器，学习率为0.01，动量为0.9\n",
    "\n",
    "print(\"损失函数:\", loss_fn)\n",
    "print(\"优化器:\", optimizer)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 编写训练函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 116,
   "metadata": {},
   "outputs": [],
   "source": [
    "def train_model(model, train_loader, val_loader, criterion, optimizer, device, num_epochs=5, early_stopping=None, model_saver=None, tensorboard_logger=None):\n",
    "    \"\"\"\n",
    "    训练模型函数\n",
    "    \n",
    "    参数:\n",
    "        model: 要训练的模型\n",
    "        train_loader: 训练数据加载器\n",
    "        val_loader: 验证数据加载器\n",
    "        criterion: 损失函数\n",
    "        optimizer: 优化器\n",
    "        device: 计算设备(CPU/GPU)\n",
    "        num_epochs: 训练轮数\n",
    "        early_stopping: 早停对象\n",
    "        model_saver: 模型保存对象\n",
    "        tensorboard_logger: Tensorboard日志记录器\n",
    "        \n",
    "    返回:\n",
    "        model: 训练好的模型\n",
    "        history: 训练历史数据，包含每轮的损失和准确率\n",
    "    \"\"\"\n",
    "    # 记录训练历史\n",
    "    history = {\n",
    "        'train_loss': [],\n",
    "        'train_acc': [],\n",
    "        'val_loss': [],\n",
    "        'val_acc': []\n",
    "    }\n",
    "    \n",
    "    # 训练循环\n",
    "    for epoch in range(num_epochs):\n",
    "        model.train()  # 设置为训练模式\n",
    "        running_loss = 0.0 #训练集损失\n",
    "        correct = 0 #训练集准确率\n",
    "        total = 0 #训练集总数\n",
    "        \n",
    "        # 训练一个epoch,把55000全部训练一遍\n",
    "        for i, (images, labels) in enumerate(train_loader):\n",
    "            images, labels = images.to(device), labels.to(device)\n",
    "            \n",
    "            # 梯度清零\n",
    "            optimizer.zero_grad()\n",
    "            \n",
    "            # 前向传播\n",
    "            outputs = model(images)\n",
    "            loss = criterion(outputs, labels)\n",
    "            \n",
    "            # 反向传播与优化\n",
    "            loss.backward() #反向传播，计算梯度\n",
    "            optimizer.step() #优化器更新参数\n",
    "            \n",
    "            # 统计训练集 损失和准确率\n",
    "            running_loss += loss.item()\n",
    "            _, predicted = torch.max(outputs.data, 1) #torch.max(outputs.data, 1)返回两个值，第一个是最大值，第二个是最大值的索引\n",
    "            total += labels.size(0)\n",
    "            correct += (predicted == labels).sum().item()\n",
    "            \n",
    "            # 每100个批次打印一次信息\n",
    "            if (i + 1) % 100 == 0:\n",
    "                print(f'轮次 [{epoch+1}/{num_epochs}], 批次 [{i+1}/{len(train_loader)}], 损失: {loss.item():.4f}', end='\\r')\n",
    "        \n",
    "        # 计算当前epoch的平均损失和准确率\n",
    "        epoch_train_loss = running_loss / len(train_loader)\n",
    "        epoch_train_acc = 100 * correct / total\n",
    "        \n",
    "        # 使用evaluate_model函数评估验证集\n",
    "        val_acc, val_loss = evaluate_model(model, val_loader, device, criterion)\n",
    "        \n",
    "        # 记录历史数据\n",
    "        history['train_loss'].append(epoch_train_loss)\n",
    "        history['train_acc'].append(epoch_train_acc)\n",
    "        history['val_loss'].append(val_loss)\n",
    "        history['val_acc'].append(val_acc)\n",
    "        \n",
    "        # 如果有Tensorboard记录器，记录训练和验证指标\n",
    "        if tensorboard_logger is not None:\n",
    "            tensorboard_logger.log_training(epoch,epoch_train_loss,epoch_train_acc)\n",
    "            tensorboard_logger.log_validation(epoch,val_loss,val_acc)\n",
    "        \n",
    "        print(f'轮次 {epoch+1}/{num_epochs} 完成! 训练损失: {epoch_train_loss:.4f}, 训练准确率: {epoch_train_acc:.2f}%, 验证损失: {val_loss:.4f}, 验证准确率: {val_acc:.2f}%')\n",
    "        \n",
    "        # 如果有模型保存器，保存模型\n",
    "        if model_saver is not None:\n",
    "            model_saver(model, val_acc, epoch)\n",
    "        \n",
    "        # 如果有早停器，检查是否应该早停\n",
    "        if early_stopping is not None:\n",
    "            early_stopping(val_acc)\n",
    "            if early_stopping.early_stop:\n",
    "                print(f'早停: 已有{early_stopping.patience}轮验证损失没有改善！')\n",
    "                break\n",
    "    \n",
    "    return model, history\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 117,
   "metadata": {},
   "outputs": [],
   "source": [
    "model = NeuralNetwork()\n",
    "\n",
    "optimizer = torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.9)  # SGD优化器，学习率为0.01，动量为0.9"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 118,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "使用设备: cpu\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "cf2d191a0d3942909b145457f91c4989",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/43000 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "早停触发! 最佳验证准确率: 89.3200\n",
      "早停: 已有5轮验证损失没有改善！\n"
     ]
    }
   ],
   "source": [
    "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n",
    "print(f\"使用设备: {device}\")\n",
    "model = model.to(device) #将模型移动到GPU\n",
    "early_stopping=EarlyStopping(patience=5, delta=0.001)\n",
    "model_saver=ModelSaver(save_dir='model_weights', save_best_only=True)\n",
    "tensorboard_logger=TensorboardLogger(log_dir='logs')\n",
    "\n",
    "model, history = train_classification_model(model, train_loader, val_loader, loss_fn, optimizer, device, num_epochs=50, early_stopping=early_stopping, model_saver=model_saver, tensorboard_logger=tensorboard_logger)\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 119,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[{'loss': 0.06706434488296509, 'acc': 98.4375, 'step': 13901},\n",
       " {'loss': 0.0678684189915657, 'acc': 96.875, 'step': 13902},\n",
       " {'loss': 0.1970507800579071, 'acc': 96.875, 'step': 13903},\n",
       " {'loss': 0.16083800792694092, 'acc': 92.1875, 'step': 13904},\n",
       " {'loss': 0.13906127214431763, 'acc': 96.875, 'step': 13905},\n",
       " {'loss': 0.1297730803489685, 'acc': 95.3125, 'step': 13906},\n",
       " {'loss': 0.17077568173408508, 'acc': 95.3125, 'step': 13907},\n",
       " {'loss': 0.1768333464860916, 'acc': 95.3125, 'step': 13908},\n",
       " {'loss': 0.15197636187076569, 'acc': 95.3125, 'step': 13909},\n",
       " {'loss': 0.10073345899581909, 'acc': 92.1875, 'step': 13910},\n",
       " {'loss': 0.23989082872867584, 'acc': 93.75, 'step': 13911},\n",
       " {'loss': 0.06796438246965408, 'acc': 98.4375, 'step': 13912},\n",
       " {'loss': 0.07965078949928284, 'acc': 95.3125, 'step': 13913},\n",
       " {'loss': 0.07777652144432068, 'acc': 96.875, 'step': 13914},\n",
       " {'loss': 0.09571711719036102, 'acc': 96.875, 'step': 13915},\n",
       " {'loss': 0.24160969257354736, 'acc': 87.5, 'step': 13916},\n",
       " {'loss': 0.09157708287239075, 'acc': 96.875, 'step': 13917},\n",
       " {'loss': 0.24116070568561554, 'acc': 89.0625, 'step': 13918},\n",
       " {'loss': 0.1510719656944275, 'acc': 95.3125, 'step': 13919},\n",
       " {'loss': 0.1063864529132843, 'acc': 95.3125, 'step': 13920},\n",
       " {'loss': 0.17548862099647522, 'acc': 92.1875, 'step': 13921},\n",
       " {'loss': 0.10798196494579315, 'acc': 95.3125, 'step': 13922},\n",
       " {'loss': 0.26585808396339417, 'acc': 87.5, 'step': 13923},\n",
       " {'loss': 0.07564530521631241, 'acc': 96.875, 'step': 13924},\n",
       " {'loss': 0.11365866661071777, 'acc': 95.3125, 'step': 13925},\n",
       " {'loss': 0.05042599141597748, 'acc': 98.4375, 'step': 13926},\n",
       " {'loss': 0.1717621088027954, 'acc': 92.1875, 'step': 13927},\n",
       " {'loss': 0.06818047165870667, 'acc': 95.3125, 'step': 13928},\n",
       " {'loss': 0.0860133245587349, 'acc': 95.3125, 'step': 13929},\n",
       " {'loss': 0.1699773669242859, 'acc': 93.75, 'step': 13930},\n",
       " {'loss': 0.0831693559885025, 'acc': 98.4375, 'step': 13931},\n",
       " {'loss': 0.07362433522939682, 'acc': 98.4375, 'step': 13932},\n",
       " {'loss': 0.23153656721115112, 'acc': 87.5, 'step': 13933},\n",
       " {'loss': 0.09572599083185196, 'acc': 96.875, 'step': 13934},\n",
       " {'loss': 0.05642660707235336, 'acc': 100.0, 'step': 13935},\n",
       " {'loss': 0.13458740711212158, 'acc': 95.3125, 'step': 13936},\n",
       " {'loss': 0.1985294669866562, 'acc': 93.75, 'step': 13937},\n",
       " {'loss': 0.0946246087551117, 'acc': 95.3125, 'step': 13938},\n",
       " {'loss': 0.144589364528656, 'acc': 96.875, 'step': 13939},\n",
       " {'loss': 0.11947989463806152, 'acc': 93.75, 'step': 13940},\n",
       " {'loss': 0.15037605166435242, 'acc': 93.75, 'step': 13941},\n",
       " {'loss': 0.06303923577070236, 'acc': 96.875, 'step': 13942},\n",
       " {'loss': 0.2596585750579834, 'acc': 89.0625, 'step': 13943},\n",
       " {'loss': 0.14828282594680786, 'acc': 95.3125, 'step': 13944},\n",
       " {'loss': 0.13649937510490417, 'acc': 95.3125, 'step': 13945},\n",
       " {'loss': 0.13517062366008759, 'acc': 95.3125, 'step': 13946},\n",
       " {'loss': 0.0888436883687973, 'acc': 96.875, 'step': 13947},\n",
       " {'loss': 0.1358029544353485, 'acc': 93.75, 'step': 13948},\n",
       " {'loss': 0.11709335446357727, 'acc': 93.75, 'step': 13949},\n",
       " {'loss': 0.1700093150138855, 'acc': 92.1875, 'step': 13950},\n",
       " {'loss': 0.17261752486228943, 'acc': 96.875, 'step': 13951},\n",
       " {'loss': 0.1623310148715973, 'acc': 95.3125, 'step': 13952},\n",
       " {'loss': 0.21394562721252441, 'acc': 92.1875, 'step': 13953},\n",
       " {'loss': 0.08140252530574799, 'acc': 95.3125, 'step': 13954},\n",
       " {'loss': 0.1752031445503235, 'acc': 93.75, 'step': 13955},\n",
       " {'loss': 0.15815423429012299, 'acc': 93.75, 'step': 13956},\n",
       " {'loss': 0.1407478153705597, 'acc': 95.3125, 'step': 13957},\n",
       " {'loss': 0.20237118005752563, 'acc': 96.875, 'step': 13958},\n",
       " {'loss': 0.08702579885721207, 'acc': 96.875, 'step': 13959},\n",
       " {'loss': 0.13663893938064575, 'acc': 95.3125, 'step': 13960},\n",
       " {'loss': 0.35244131088256836, 'acc': 89.0625, 'step': 13961},\n",
       " {'loss': 0.10512027889490128, 'acc': 95.3125, 'step': 13962},\n",
       " {'loss': 0.21181821823120117, 'acc': 92.1875, 'step': 13963},\n",
       " {'loss': 0.06485898792743683, 'acc': 98.4375, 'step': 13964},\n",
       " {'loss': 0.08142934739589691, 'acc': 96.875, 'step': 13965},\n",
       " {'loss': 0.22229830920696259, 'acc': 89.0625, 'step': 13966},\n",
       " {'loss': 0.122687429189682, 'acc': 95.3125, 'step': 13967},\n",
       " {'loss': 0.07775179296731949, 'acc': 95.3125, 'step': 13968},\n",
       " {'loss': 0.17969609797000885, 'acc': 93.75, 'step': 13969},\n",
       " {'loss': 0.10589355230331421, 'acc': 96.875, 'step': 13970},\n",
       " {'loss': 0.30214548110961914, 'acc': 93.75, 'step': 13971},\n",
       " {'loss': 0.1923600435256958, 'acc': 96.875, 'step': 13972},\n",
       " {'loss': 0.08275660127401352, 'acc': 96.875, 'step': 13973},\n",
       " {'loss': 0.07008420675992966, 'acc': 98.4375, 'step': 13974},\n",
       " {'loss': 0.1469419300556183, 'acc': 95.3125, 'step': 13975},\n",
       " {'loss': 0.1329851746559143, 'acc': 93.75, 'step': 13976},\n",
       " {'loss': 0.03535575047135353, 'acc': 100.0, 'step': 13977},\n",
       " {'loss': 0.03242731839418411, 'acc': 100.0, 'step': 13978},\n",
       " {'loss': 0.14560236036777496, 'acc': 92.1875, 'step': 13979},\n",
       " {'loss': 0.23431967198848724, 'acc': 90.625, 'step': 13980},\n",
       " {'loss': 0.3220178186893463, 'acc': 89.0625, 'step': 13981},\n",
       " {'loss': 0.08856762200593948, 'acc': 96.875, 'step': 13982},\n",
       " {'loss': 0.1680196076631546, 'acc': 95.3125, 'step': 13983},\n",
       " {'loss': 0.13451305031776428, 'acc': 92.1875, 'step': 13984},\n",
       " {'loss': 0.2676466107368469, 'acc': 89.0625, 'step': 13985},\n",
       " {'loss': 0.12917298078536987, 'acc': 96.875, 'step': 13986},\n",
       " {'loss': 0.16847524046897888, 'acc': 90.625, 'step': 13987},\n",
       " {'loss': 0.26431360840797424, 'acc': 92.1875, 'step': 13988},\n",
       " {'loss': 0.16893327236175537, 'acc': 93.75, 'step': 13989},\n",
       " {'loss': 0.09537798166275024, 'acc': 95.3125, 'step': 13990},\n",
       " {'loss': 0.2648783028125763, 'acc': 93.75, 'step': 13991},\n",
       " {'loss': 0.140642449259758, 'acc': 95.3125, 'step': 13992},\n",
       " {'loss': 0.07721913605928421, 'acc': 98.4375, 'step': 13993},\n",
       " {'loss': 0.0994504764676094, 'acc': 98.4375, 'step': 13994},\n",
       " {'loss': 0.24445343017578125, 'acc': 89.0625, 'step': 13995},\n",
       " {'loss': 0.0980919748544693, 'acc': 96.875, 'step': 13996},\n",
       " {'loss': 0.19869840145111084, 'acc': 92.1875, 'step': 13997},\n",
       " {'loss': 0.23002730309963226, 'acc': 93.75, 'step': 13998},\n",
       " {'loss': 0.15183338522911072, 'acc': 90.625, 'step': 13999}]"
      ]
     },
     "execution_count": 119,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "history['train'][-100:-1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 120,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[{'loss': 2.299168511581421, 'acc': 11.3, 'step': 0},\n",
       " {'loss': 0.45760872707366945, 'acc': 83.42, 'step': 500},\n",
       " {'loss': 0.41048214251995085, 'acc': 84.8, 'step': 1000},\n",
       " {'loss': 0.36061181476116183, 'acc': 86.94, 'step': 1500},\n",
       " {'loss': 0.37912225732803345, 'acc': 86.14, 'step': 2000},\n",
       " {'loss': 0.3648192744612694, 'acc': 86.1, 'step': 2500},\n",
       " {'loss': 0.33806689162254333, 'acc': 87.8, 'step': 3000},\n",
       " {'loss': 0.3413510399580002, 'acc': 87.36, 'step': 3500},\n",
       " {'loss': 0.3553165209531784, 'acc': 86.82, 'step': 4000},\n",
       " {'loss': 0.34117950599193575, 'acc': 88.0, 'step': 4500},\n",
       " {'loss': 0.31224004759788515, 'acc': 88.36, 'step': 5000},\n",
       " {'loss': 0.34582201178073885, 'acc': 87.6, 'step': 5500},\n",
       " {'loss': 0.3261360744714737, 'acc': 88.64, 'step': 6000},\n",
       " {'loss': 0.3563735406398773, 'acc': 87.18, 'step': 6500},\n",
       " {'loss': 0.316435919290781, 'acc': 88.46, 'step': 7000},\n",
       " {'loss': 0.3238112901449203, 'acc': 88.6, 'step': 7500},\n",
       " {'loss': 0.31911743693351746, 'acc': 88.74, 'step': 8000},\n",
       " {'loss': 0.32475138439536094, 'acc': 88.44, 'step': 8500},\n",
       " {'loss': 0.3397041666150093, 'acc': 88.4, 'step': 9000},\n",
       " {'loss': 0.330344818520546, 'acc': 88.86, 'step': 9500},\n",
       " {'loss': 0.347681511092186, 'acc': 88.16, 'step': 10000},\n",
       " {'loss': 0.3313021310567856, 'acc': 88.54, 'step': 10500},\n",
       " {'loss': 0.33482469784617425, 'acc': 88.34, 'step': 11000},\n",
       " {'loss': 0.3265903970956802, 'acc': 89.32, 'step': 11500},\n",
       " {'loss': 0.3313893511533737, 'acc': 88.74, 'step': 12000},\n",
       " {'loss': 0.34549756664037706, 'acc': 88.4, 'step': 12500},\n",
       " {'loss': 0.3471290622472763, 'acc': 88.88, 'step': 13000},\n",
       " {'loss': 0.3445535779416561, 'acc': 88.76, 'step': 13500}]"
      ]
     },
     "execution_count": 120,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "history['val'][-1000:-1]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 绘制损失曲线和准确率曲线"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 121,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 导入绘图库\n",
    "import matplotlib.pyplot as plt\n",
    "from matplotlib import font_manager\n",
    "def plot_learning_curves1(history):\n",
    "    # 设置中文字体支持\n",
    "    plt.rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体\n",
    "    plt.rcParams['axes.unicode_minus'] = False    # 解决负号显示问题\n",
    "\n",
    "    # 创建一个图形，包含两个子图（损失和准确率）\n",
    "    fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(15, 5))\n",
    "\n",
    "    # 绘制损失曲线\n",
    "    epochs = range(1, len(history['train_loss']) + 1)\n",
    "    ax1.plot(epochs, history['train_loss'], 'b-', label='训练损失')\n",
    "    ax1.plot(epochs, history['val_loss'], 'r-', label='验证损失')\n",
    "    ax1.set_title('训练与验证损失')\n",
    "    ax1.set_xlabel('轮次')\n",
    "    ax1.set_ylabel('损失')\n",
    "    ax1.legend()\n",
    "    ax1.grid(True)\n",
    "\n",
    "    # 绘制准确率曲线\n",
    "    ax2.plot(epochs, history['train_acc'], 'b-', label='训练准确率')\n",
    "    ax2.plot(epochs, history['val_acc'], 'r-', label='验证准确率')\n",
    "    ax2.set_title('训练与验证准确率')\n",
    "    ax2.set_xlabel('轮次')\n",
    "    ax2.set_ylabel('准确率 (%)')\n",
    "    ax2.legend()\n",
    "    ax2.grid(True)\n",
    "\n",
    "    plt.tight_layout()\n",
    "    plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 124,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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RqVzCk2tW7fGM888g9mzZ2PGjBkYOXIkbrvtNvVHRl5IKlWqpI51p06d8NprrwV7d6mYv5uCv58UyfjaFBn42hR5+NoU+SIm5EhbR3n3ZOLEiepj6ZLRu3dvNb6yZs2aqhvKtddeqxK6fh8KPbfccgtuvPFGdayGDx+uOth88MEHF91Pute8++67aqgAhe/vpuDvJ0UyvjZFBr42RR6+NkUBTwSZPHmyJy4uzlOxYkVP5cqVPRs3bvRMnDjR06NHj1z3qVmzpic9PT2o+0oUyeRPy+7duwv83RT8/aRowNcmotDA16boYpB/EEGOHDmClStXqraAFStWDPbuEJEXfzcpmvHnnyg08XczckVcyCEiIiIiougWMXNyiIiIiIiIBEMOERERERFFFIYcIiIiIiKKKAw5REREREQUURhyiIiIiIgoojDkEBERERFRRGHIIQqgunXrYu7cucHeDSIiIoWvSxStGHKIiIiIiCiiMOQQ+WjWrFlo1qwZ4uLi0LlzZ+zYsQP9+/eHwWDA3r170atXL3X91VdfzX7MH3/8gZYtW6J8+fK4++67kZWVpW6/4447MGzYMLRv3x6JiYl44IEH4HA4gvi/IyKicMPXJaKLMeQQ+eiWW27BiBEjsHXrVvWi8uyzz+Lnn3/G6dOnkZSUhN9//11df+yxx9T95cXmqquuwiOPPILly5dj2bJleP3117Ofb8qUKXj55ZfVcII///wTH3zwQRD/d0REFG74ukR0MYYcIh/Fxsaqd7XkHa7PPvsMX375JcqUKaPeDTMajShbtqy6brVa1f1//PFHtGnTRr1T1qhRI9x///3qBUQ3dOhQXHnllWjVqpV6x2zy5MlB/N8REVG44esS0cUYcoh89M0332DOnDmoWbOmGgKwYcOGAu9/4MABrF69Wr3AyPbEE09g37592Z+Xd9l08pxHjx4t0f0nIqLIwtcloosx5BD5ID09HU6nEzNnzsSJEyfQtWtXNX5ZJ++YeTyeXI+pVasWBg8ejDVr1qht7dq16vG6PXv2ZF/fv38/qlWrVkr/GyIiCnd8XSLKG0MOkQ/khaRfv3749ttvcezYMfXCIbfpGjRogBkzZuDw4cOYPXu2uk0mcM6fPx/bt29XQwXef/99NXZa99tvv2HatGlYt24dPvzwQ1x77bVB+b8REVH44esSUT48ROST//73v54mTZp4bDabp0WLFp558+Zlf2716tWeli1besxms6dr167Zt0+fPl3dNy4uztOrVy/Ptm3b1O23336759Zbb1WfK1eunOfBBx/02O32oPy/iIgoPPF1iehiBvknvwBERCVLhhTIQm0vvPBCsHeFiIiIr0sUMThcjYiIiIiIIgorOUREREREFFFYySEiIiIioojCkENERERERBGFIYeIiIiIiCIKQw4REREREUUUhhwiIiIiIoooDDlERERERBRRGHKIiIiIiCiiMOQQEREREREiyf8DN2NzxGa8pO0AAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 1000x500 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "plot_learning_curves(history, sample_step=500)  #横坐标是 steps\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 125,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(88.7, 0.3570783118277788)"
      ]
     },
     "execution_count": 125,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 在测试集上评估模型\n",
    "test_accuracy = evaluate_model(model, test_loader, device,loss_fn)\n",
    "test_accuracy\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
